home *** CD-ROM | disk | FTP | other *** search
/ PCMania 64 / PCMania CD64_1.iso / phy / phy004 / oop / mud.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1997-05-31  |  3.6 KB  |  111 lines

  1. //  Creador de aventuras conversacionales    --->  Navi Dj/PhyMosys
  2. //  Módulo principal
  3.  
  4. extern "C" {
  5.   #include <string.h>
  6.   #include <stdio.h>
  7.   }
  8. #include <iostream.h>
  9. #include "objects.hpp"        //  Inclusión de las clases objetos y
  10. #include "room.hpp"        // habitaciones.
  11.  
  12. char *des1="Estas en una gran sala llena de polvo y... telarañas.";
  13. char *des2="Esto es una habitación muy oscura y llena de polvo.";
  14. char *des3="Estas en una pequeña sala con un gran ventanal.";
  15.  
  16. char *obj1="Es un sable muy pesado. Debe ser una buena arma.";
  17. char *obj2="Es una botella llena de agua, puede ser util.";
  18. char *obj3="Se trata de una bolsa llena de polvo.";
  19. char *obj4="Con estos prismaticos puedo ver muy lejos.";
  20.  
  21. int main(void)
  22. {
  23.  Room h1(des1);            //  Definimos las salas.
  24.  Room h2(des2);
  25.  Room h3(des3);
  26.  h1.conecta(&h2, R_SUR);    //  Conectamos las salas.
  27.  h1.conecta(&h3, R_NORTE);
  28.  
  29.  objeto o1("Sable", obj1);    //  Cargamos los objetos.
  30.  objeto o2("Botella", obj2);
  31.  objeto o3("Bolsa", obj3);
  32.  objeto o4("Prismaticos", obj4);
  33.  
  34.  h1.deja_obj(&o1);        //  Dejamos los objetos donde corresponde.
  35.  h1.deja_obj(&o2);
  36.  h2.deja_obj(&o3);
  37.  h3.deja_obj(&o4);
  38.  
  39.  char comando[80],        //  Cadena donde cogemos los comandos.
  40.       param[80];        //  Cadena para pillar los parámetros.
  41.  Room *sala=&h1;        //  Apunta a la sala actual.
  42.  Room *aux;
  43.  objeto *aux_o;            //  Objetos auxiliares.
  44.  
  45.  objeto *obj[20];        //  Array con los objetos que lleva el
  46.  int num=0;            // personaje y número de estos.
  47.  
  48.  for(;;) {            //  Bucle sin fin.
  49.    sala->describe();
  50.    sala->salidas();        //  Muestra la descripción y las salidas.
  51.    cout << endl << ">";
  52.    gets(comando);        //  Leemos el comando.
  53.    strlwr(comando);        //  Convertimos a minusculas.
  54.  
  55.    aux=sala;            //  Guardar temporalmente la sala.
  56.    if(!strcmp(comando, "norte"))
  57.      sala=sala->ir_a(R_NORTE);
  58.    if(!strcmp(comando, "sur"))
  59.      sala=sala->ir_a(R_SUR);
  60.    if(!strcmp(comando, "este"))
  61.      sala=sala->ir_a(R_ESTE);
  62.    if(!strcmp(comando, "oeste"))
  63.      sala=sala->ir_a(R_OESTE);    //  Nos movemos por el mundo.
  64.    if(sala==NULL) {
  65.      sala=aux;            //  Comprobación de que el moviento es correcto.
  66.      cout << "No puedes ir en esa dirección." << endl;
  67.      }
  68.  
  69.    if(!strcmp(comando, "i")) {    //  Hacer un inventario.
  70.      cout << "Tengo: ";
  71.      for(int i=0; i<num; i++) {
  72.        obj[i]->es_nombre();    //  Escribimos todo lo que hay.
  73.        cout << ", ";
  74.        }
  75.      cout << endl;
  76.      }
  77.                      //  Para coger un objeto mostraremos
  78.    if(!strcmp(comando, "coger")) {   // una pregunta.
  79.      cout << "¿Que quieres coger? ";
  80.      gets(param);
  81.      if((aux_o=sala->coge_obj(param))==NULL)
  82.        cout << "No puedo ver eso..." << endl;
  83.       else
  84.        obj[num++]=aux_o;    //  Añadimos a la lista.
  85.      }
  86.    if(!strcmp(comando, "dejar")) {
  87.      cout << "¿Que quieres dejar? ";
  88.      gets(param);        //  Para dejar los objetos tambien se muestra
  89.      for(int i=0; i<num; i++)    // la pregunta.
  90.        if(obj[i]->es_un(param)) {
  91.      sala->deja_obj(obj[i]);
  92.      for(int j=i; j<num-1; j++)
  93.        obj[j]=obj[j+1];
  94.      --num;
  95.      break;
  96.      }
  97.      }
  98.  
  99.    if(!strcmp(comando, "help"))    //  Ayuda con los comandos.
  100.      cout << " Puedes usar los siguientes comandos:" << endl\
  101.       << "  norte, sur, este, oeste -> Te mueves por el mundo" << endl\
  102.       << "  i -> Inventario de objetos" << endl\
  103.       << "  coger, dejar -> Te permite coger o dejar objetos" << endl\
  104.       << "  quit -> Termina la ejecución del juego" << endl << endl;
  105.    if(!strcmp(comando, "quit"))
  106.      break;            //  Si el usuario se quiere ir...
  107.    }
  108.  
  109.  return 0;        //  Fin de la partida.
  110.  }
  111.